package com.zb.service.imp.middleware.instruction;

import java.util.HashMap;

/**
 * Created by luoyp on 2016/6/7.
 * 2.0协议下, 所有指令的帧类型
 */
public enum Ev3c2Instructions implements Instruction
{
	Register("A1", "注册充电设备地址", InstructionType.SendByCharger),
	RegisterReply("A2", "服务器回复注册", InstructionType.ReplyByServer),
	UnRegister("A3", "注销充电设备地址", InstructionType.SendByCharger),
	UnRegisterReply("A4", "服务器回复注销", InstructionType.ReplyByServer),
	Login("A5", "设备登陆服务器", InstructionType.SendByCharger),
	LoginReply("A6", "服务器回复登陆", InstructionType.ReplyByServer),
	Logoff("A7", "设备退出登陆服务器", InstructionType.SendByCharger),
	LogoffReply("A8", "服务器回复退出登陆", InstructionType.ReplyByServer),
	Heart("A9", "心跳", InstructionType.SendByCharger),
	HeartReply("AA", "服务器回复心跳", InstructionType.ReplyByServer),

	Reserve("11", "预约电桩", InstructionType.SendByServer),
	ReserveReply("51", "电桩回复预约", InstructionType.ReplyByCharger),
	CancelReservation("12", "取消预约电桩", InstructionType.SendByServer),
	CancelReservationReply("52", "电桩回复取消预约", InstructionType.ReplyByCharger),
	Charge("13", "开启充电", InstructionType.SendByServer),
	ChargeReply("53", "电桩回复开启充电", InstructionType.ReplyByCharger),
	StopCharging("14", "关闭充电", InstructionType.SendByServer),
	StopChargingReply("54", "电桩回复关闭充电", InstructionType.ReplyByCharger),
	ChangeIp("15", "更改服务器地址IP/PORT", InstructionType.SendByServer),
	ChangeIpReply("55", "电桩回复更改服务器地址IP/PORT", InstructionType.ReplyByCharger),
	RestartCharger("16", "重启电桩", InstructionType.SendByServer),
	RestartChargerReply("56", "电桩回复重启", InstructionType.ReplyByCharger),
	SettingsReadWrite("21", "查询/配置电桩参数", InstructionType.SendByServer),
	SettingsReadWriteReply("B1", "电桩回复查询/配置电桩参数", InstructionType.ReplyByCharger),

	StatusChange("22", "状态突变上送", InstructionType.SendByCharger),
	StatusChangeReply("B2", "服务器回复状态突变", InstructionType.ReplyByServer),
	ChargingStatus("23", "充电状态上送", InstructionType.SendByCharger),
	ChargingStatusReply("B3", "服务器回复充电状态", InstructionType.ReplyByServer),
	Bill("24", "账单信息上送", InstructionType.SendByCharger),
	BillReply("B4", "服务器回复账单信息上送", InstructionType.ReplyByServer),
	Battery("25", "电池信息上送", InstructionType.SendByCharger),
	BatteryReply("B5", "服务器回复电池信息上送", InstructionType.ReplyByServer);

	/*
	* 通迅类：
注册充电设备地址（0xA1）服务器回复（0xA2）；
注销充电设备地址（0xA3）服务器回复（0xA4）；
设备登陆服务器（0xA5）服务器回复（0xA6）；
设备退出登陆服务器（0xA7）服务器回复（0xA8）；
心跳（0xA9）服务器回复（0xAA）；
控制类：
预约电桩（0x11）电桩回复（0x51）
取消预约电桩（0x12）电桩回复（0x52）
开启充电（0x13）电桩回复（0x53）
关闭充电（0x14）电桩回复（0x54）
更改服务器地址IP/PORT（0x15）电桩回复（0x55）
重启电桩（0x16）电桩回复（0x56）
数据交互类报文：
查询/配置电桩参数（0x21）电桩回复（0xB1）
状态突变上送（0x22）服务器回复（0XB2）
充电状态上送（0x23）服务器回复（0xB3）
账单信息上送（0x24）服务器回复（0XB4）。
电池信息上送（0x25）服务器回复（0XB5）。（直流桩）
	* */

	private String code;//帧类型
	private String description;//帧类型描述
	private InstructionType type;//帧类型分类

	private static final HashMap<String, Ev3c2Instructions> mapping = new HashMap<>();

	static
	{
		for (Ev3c2Instructions e : values())
		{
			mapping.put(e.code, e);
		}
	}

	private Ev3c2Instructions(String code, String description, InstructionType type)
	{
		this.code = code;
		this.description = description;
		this.type = type;
	}

	public static Ev3c2Instructions parse(String code)
	{
		return mapping.get(code);
	}

	@Override
	public String code()
	{
		return this.code;
	}

	@Override
	public String description()
	{
		return this.description;
	}

	@Override
	public InstructionType type()
	{
		return this.type;
	}

}
